<html>
    <head>
        <title>Documentación NET UTN REPASA</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <style type="text/css">
            table, td, th {
                border: 1px solid black;
                border-collapse: collapse;
                padding: 10px;
            }
        </style>
    </head>
    <body>
        <h2>Acciones solicitadas por el cliente</h2>
        <p>
            Las siguientes acciones son solicitadas por el cliente y ejecutadas por el servidor.
            Cada una de estas acciones tienen una respuesta asociada.
        </p>

        <h3 style="background-color: lightgreen;"><a name="RegisterRequestAction">1) RegisterRequestAction</a></h3>
        <p>
            El cliente solicita registrarse al servidor. <br />
            El cliente envía el nombre de usuario y la clave.
            El servidor verifica si ese nombre de usuario no existe y retorna
            la repuesta con un <a href="#RegisterResponseAction">RegisterResponseAction</a>.
            <br /> La clase está preparada para que la clave viaje encriptada aunque
            por ahora no la encripta.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        nombreUsuario
                    </td>
                    <td>
                        Un String el cual no debe superar los 50 caracteres. No
                        tiene límite inferior y acepta espacios. Esto puede
                        cambiar en un futuro.
                    </td>
                </tr>
                <tr>
                    <td>
                        clave
                    </td>
                    <td>
                        Un String el cual no tiene límite de caracteres. Tampoco
                        tiene límite inferior. Esto puede cambiar en un futuro.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="LoginRequestAction">2) LoginRequestAction</a></h3>
        <p>
            El cliente solicita iniciar sesión al servidor.
            Le pasa el usuario y la clave y espera la confirmación. El servidor le envía 
            el id de jugador en caso que el usuario haya podido iniciar sesión.<br />
            El servidor le envía un <a href="#LoginResponseAction">LoginResponseAction</a>.
        </p> 
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        nombreUsuario
                    </td>
                    <td>
                        Un String el cual no debe superar los 50 caracteres. No
                        tiene límite inferior y acepta espacios. Esto puede
                        cambiar en un futuro.
                    </td>
                </tr>
                <tr>
                    <td>
                        clave
                    </td>
                    <td>
                        Un String el cual no tiene límite de caracteres. Tampoco
                        tiene límite inferior. Esto puede cambiar en un futuro.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="CreateMultiplayerRequestAction">3) CreateMultiplayerRequestAction</a></h3>
        <p>
            El cliente solicita al servidor crear una partida multijugador con los siguientes datos:
            invitados, cantidad de rondas, cantidad de preguntas por cada ronda y las materias de la
            partida.<br />
            El servidor responde con un <a href="#CreateMultiplayerResponseAction">CreateMultiplayerResponseAction</a>.
        </p> 
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        invitados
                    </td>
                    <td>
                        Es un ArrayList con los usuarios invitados.
                    </td>
                </tr>
                <tr>
                    <td>
                        cantidadRondas
                    </td>
                    <td>
                        Es la cantidad de rondas.
                    </td>
                </tr>
                <tr>
                    <td>
                        preguntasPorRonda
                    </td>
                    <td>
                        Es la cantidad de preguntas por ronda.
                    </td>
                </tr>
                <tr>
                    <td>
                        materias
                    </td>
                    <td>
                        Es un ArrayList de materias.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="UsersRequestAction">4) UsersRequestAction</a></h3>
        <p>
            El cliente solicita al servidor una cierta cantidad N de usuarios excluyéndolo
            al solicitante.<br />
            El servidor responde con un <a href="#UsersResponseAction">UsersResponseAction</a>.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        cantidad
                    </td>
                    <td>
                        Es la cantidad de usuarios a pedir al servidor.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="SearchUsersRequestAction">5) SearchUsersRequestAction</a></h3>
        <p>
            El cliente solicita al servidor un jugador a partir de su nombre.<br />
            El servidor responde con un <a href="#SearchUsersResponseAction">SearchUsersResponseAction</a>.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario que solicita.
                    </td>
                </tr>
                <tr>
                    <td>
                        n
                    </td>
                    <td>
                        Es la cantidad de usuarios a solicitar.
                    </td>
                </tr>
                <tr>
                    <td>
                        nombre
                    </td>
                    <td>
                        Es el patrón que va a filtrar a los usuarios.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="GamesRequestAction">6) GamesRequestAction</a></h3>
        <p>
            El cliente solicita al servidor los juegos en estado: "esperando", "en juego" y "finalizado" para un determinado usuario.
            El servidor responde con un <a href="#GamesResponseAction">GamesResponseAction</a>.
        </p> 
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario que solicita.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="AcceptInvitationRequestAction">7) AcceptInvitationRequestAction</a></h3>
        <p>
            El cliente solicita al servidor aceptar la invitación de una partida y espera
            su confirmación junto a las preguntas para comenzar a jugar.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        idPartida
                    </td>
                    <td>
                        Es el id de partida para aceptar la invitación.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="QuestionsRequestAction">8) QuestionsRequestAction</a></h3>
        <p>
            El cliente solicita al servidor cierta cantidad N de preguntas para una determinada partida.<br />
            El servidor responde con un <a href="#QuestionsResponseAction">QuestionsResponseAction</a>
        </p> 
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        cantidad
                    </td>
                    <td>
                        Es la cantidad de preguntas que solicita el usuario.
                    </td>
                </tr>
                <tr>
                    <td>
                        idPartida
                    </td>
                    <td>
                        Es el id de la partida para la cual se solicita las
                        preguntas.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="AnswerRequestAction">9) AnswerRequestAction</a></h3>
        <p>
            El cliente envía al servidor las respuestas y la calificación de las
            N preguntas para una determinada ronda de una partida.
        </p> 
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        idPartida
                    </td>
                    <td>
                        Es el id de la partida.
                    </td>
                </tr>
                <tr>
                    <td>
                        ronda
                    </td>
                    <td>
                        Es la ronda de la partida.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3><a name="ProfileRequestAction">10) ProfileRequestAction</a></h3>
        <p>
            El cliente solicita al servidor el perfil de un jugador a través de su ID.(NO IMPLEMENTADO)
        </p> 

        <h3><a name="CreateSinglePlayerRequestAction">11) CreateSinglePlayerRequestAction</a></h3>
        <p>
            El cliente solicita al servidor crear una partida en modo individual.
            (NO IMPLEMENTADO)
        </p>

        <h3 style="background-color: lightgreen;"><a name="CreationDataRequestAction">12) CreationDataRequestAction</a></h3>
        <p>
            El cliente solicita al servidor los datos para crear una partida. Estos datos son las materias y las rondas permitidas.<br />
            El servidor envía un <a href="#CreationDataResponseAction">CreationDataResponseAction</a>.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="GameRequestAction">13) GameRequestAction</a></h3>
        <p>
            El cliente solicita al servidor los datos de una determinada partida.<br />
            El servidor responde con un <a href="#GameResponseAction">GameResponseAction</a>.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        idUsuario
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        idPartida
                    </td>
                    <td>
                        Es el id de la partida a solicitar.
                    </td>
                </tr>
            </tbody>
        </table>


        <!-- ##################################################################### -->

        <hr />
        <h2>Acciones solicitadas por el servidor</h2>

        <p>Estas acciones forman parte de la respuesta de las solicitudes del cliente.</p>

        <h3 style="background-color: lightgreen;"><a name="RegisterResponseAction">1) RegisterResponseAction</a></h3>
        <p>
            El servidor responde al cliente que su registro a sido confirmado o no.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        registroCorrecto
                    </td>
                    <td>
                        Una bandera que indica si el registro fue correcto.
                        El servidor no da demasiada información al respecto.
                        Las causas por la cual el registro fue incorrecto puede ser varias:
                        Parámetros incorrectos, el nombre de usuario ya existía, caracteres inválidos, etc.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="LoginResponseAction">2) LoginResponseAction</a></h3>
        <p>
            El servidor responde al cliente sobre su login. Si el login fue correcto
            entonces le envía su ID de jugador.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        user
                    </td>
                    <td>
                        Es el usuario que inicio sesión.
                    </td>
                </tr>
                <tr>
                    <td>
                        iniciadoSesionExitosamente
                    </td>
                    <td>
                        Una bandera que indica si se ha podido iniciar sesión correctamente.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="CreateMultiplayerResponseAction">3) CreateMultiplayerResponseAction</a></h3>
        <p>
            El servidor responde al cliente sobre si se pudo crear la partida con esos
            invitados.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        idUsuario
                    </td>
                    <td>
                        Es el id de usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        creacionCorrecta
                    </td>
                    <td>
                        Este atributo indica si la partida fue creada con éxito.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="UsersResponseAction">4) UsersResponseAction</a></h3>
        <p>
            El servidor response al cliente con N usuarios, instancias de la clase User.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        usuarios
                    </td>
                    <td>
                        Es un ArrayList de usuarios. Puede ser null en caso que los parámetros
                        hayan generado algún problema en el lado del servidor. Por ejemplo:
                        que la cantidad solicitada sea menor o igual a cero.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="SearchUsersResponseAction">5) SearchUsersResponseAction</a></h3>
        <p>
            El servidor responde los usuarios que coinciden con el patrón recibido.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        usuarios
                    </td>
                    <td>
                        Un ArrayList que contiene los usuarios a partir de un patrón.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="GamesResponseAction">6) GamesResponseAction</a></h3>
        <p>
            El servidor retorna una lista con las partidas en estado "esperando", "en juego" y "finalizadas" del usuario solicitante.<br />
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        partidas
                    </td>
                    <td>
                        Un ArrayList que contiene las partidas en estado "esperando", "en juego" y "finalizadas" del usuario solicitante.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="AcceptInvitationResponseAction">7) AcceptInvitationResponseAction</a></h3>
        <p>
            Verifica si puede aceptar la invitación.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        correcto
                    </td>
                    <td>
                        Indica si la aceptación fue correcta.
                    </td>
                </tr>
                <tr>
                    <td>
                        idPartida
                    </td>
                    <td>
                        Es el id de partida del cual se aceptó.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="QuestionsResponseAction">8) QuestionsResponseAction</a></h3>
        <p>
            El servidor retorna las preguntas para una determinada partida.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        preguntas
                    </td>
                    <td>
                        Son las preguntas que el usuario solicito en forma aleatoria.
                    </td>
                </tr>
                <tr>
                    <td>
                        idPartida
                    </td>
                    <td>
                        Es el id de partida.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="AnswerResponseAction">9) AnswerResponseAction</a></h3>
        <p>
            El servidor responde si las respuestas han podido ser guardadas e
            indica si la partida ha finalizado enviándole el estado del juego
            actual.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        id
                    </td>
                    <td>
                        Es el id del usuario solicitante.
                    </td>
                </tr>
                <tr>
                    <td>
                        exito
                    </td>
                    <td>
                        Una bandera que indica si se han guardado con éxito las
                        respuestas.
                    </td>
                </tr>
                <tr>
                    <td>
                        partidaFinalizada
                    </td>
                    <td>
                        Una bandera que indica si la partida ha finalizado.
                    </td>
                </tr>
                <tr>
                    <td>
                        partida
                    </td>
                    <td>
                        Un objeto que contiene a la partida multijugador, a todos
                        sus jugadores y a las materias.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 ><a name="ProfileResponseAction">10) ProfileResponseAction</a></h3>
        <p>
            El servidor responde al cliente con el perfil de un determinado usuario.(NO IMPLEMENTADO)
        </p>

        <h3 ><a name="CreateSinglePlayerResponseAction">11) CreateSinglePlayerResponseAction</a></h3>
        <p>
            El servidor confirma la creación y le envía las preguntas.(NO IMPLEMENTADO)
        </p>

        <h3 style="background-color: lightgreen;"><a name="CreationDataResponseAction">12) CreationDataResponseAction</a></h3>
        <p>
            El servidor envía los años y las materias al cliente.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        materias
                    </td>
                    <td>
                        Es la lista de materias permitidas.
                    </td>
                </tr>
                <tr>
                    <td>
                        rondas
                    </td>
                    <td>
                        Es la lista de rondas permitidas.
                    </td>
                </tr>
            </tbody>
        </table>

        <h3 style="background-color: lightgreen;"><a name="GameResponseAction">13) GameResponseAction</a></h3>
        <p>
            El servidor envía al cliente los datos de una determinada partida.
        </p>
        <table>
            <thead>
                <tr>
                    <th>
                        Atributo
                    </th>
                    <th>
                        Descripción
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        partida
                    </td>
                    <td>
                        Es el objeto MultiplayerGame que solicitó el usuario.
                    </td>
                </tr>
            </tbody>
        </table>

        <hr />

        <p>
            En el sistema existen 3 transacciones:
        </p>
        <ul>
            <li>
                Crear partida.
            </li>
            <li>
                Aceptar invitación.
            </li>
            <li>
                Enviar respuestas.
            </li>
        </ul>
    </body>
</html>